package com.zhisheng.demo01_HomeWork;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建者： 智晟全哥
 *
 * 需求:
 *  使用`HashMap`和递归计算一个嵌套`HashMap`中所有整数值的总和。`HashMap`的结构如下：键是字符串类型，值可能是一个整数或者又是一个`HashMap`。例如：
 *  {
 *   "key1": 5,
 *   "key2": {
 *     "subkey1": 3,
 *     "subkey2": {
 *       "subsubkey1": 7
 *     }
 *   },
 *   "key3": 9
 * }
 * 编写一个方法来计算这个嵌套结构中所有整数值的总和。
 *
 * 分析:
 *      1: 准备一个嵌套的map集合保存原始数据;
 *      2: 定义一个方法,使用递归的方式求和(3个套路: 1: 规律,2: 出口,3: 方向)
 *      3: 调用方法得到结果并输出
 *
 */
public class Test01 {
    public static void main(String[] args) {
        // 1: 准备一个嵌套的map集合保存原始数据;
        HashMap<String,Object> map  = new HashMap<>();
        map.put("key1",5);

        HashMap<String,Object> map2  = new HashMap<>();
        map2.put("subkey1",3);
        HashMap<String,Object> map3  = new HashMap<>();
        map3.put("subsubkey1",7);
        map2.put("subkey2",map3);
        map.put("key2",map2);
        map.put("key3",9);

        //System.out.println(map);
        int sun = getSun(map);
        System.out.println(sun);

    }
    //2: 定义一个方法,使用递归的方式求和(3个套路: 1: 规律,2: 出口,3: 方向)
    public static int getSun(HashMap<String,Object> map){
        // 1: 准备一个sum变量为0
        int sum = 0;
        // 2: 遍历map求和
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            Object value = entry.getValue();
            if(value instanceof Integer){
                // 出口
                sum+=Integer.parseInt(value.toString());
            }else {
                // 递归的入口
                HashMap<String,Object> xmap = (HashMap<String, Object>) value;
                sum+=getSun(xmap);
            }
        }
        return sum;
    }
}
